#include "../../../commom/data_redis.hpp"
#include <sw/redis++/redis++.h>
#include <sw/redis++/connection.h>
#include <thread>
#include <vector>
#include <string>
#include <iostream>
#include <gflags/gflags.h> 

DEFINE_string(host, "120.76.98.215", "这是redis的IP地址");
DEFINE_int32(port, 14514, "这是redis服务器的端口号");
DEFINE_bool(keep_alive, true, "是否使用保活长连接机制");
DEFINE_int32(db, 0, "redis的库的编号, 默认0");

void Session_test(std::shared_ptr<sw::redis::Redis>& client) {
    zhiang::Session ss(client);
    ss.append("sid1", "uid1");
    ss.append("sid2", "uid2");
    ss.append("sid3", "uid3");
    ss.append("sid4", "uid4");

    ss.remove("sid1");
    ss.remove("sid3");

    auto y1 = ss.uid("sid1");
    auto y2 = ss.uid("sid2");
    auto y3 = ss.uid("sid3");
    auto y4 = ss.uid("sid4");
    if(y1) std::cout << *y1 << std::endl;
    if(y2) std::cout << *y2 << std::endl;
    if(y3) std::cout << *y3 << std::endl;
    if(y4) std::cout << *y4 << std::endl;
}

void Status_test(std::shared_ptr<sw::redis::Redis>& client) {
    zhiang::Status st(client);
    st.append("uid1");
    st.append("uid2");
    st.append("uid3");
    st.append("uid4");

    st.remove("uid1");
    st.remove("uid3");

    auto y1 = st.exist("uid1");
    auto y2 = st.exist("uid2");
    auto y3 = st.exist("uid3");
    auto y4 = st.exist("uid4");
    std::cout << y1 << std::endl;
    std::cout << y2 << std::endl;
    std::cout << y3 << std::endl;
    std::cout << y4 << std::endl;
}

void Codes_test(std::shared_ptr<sw::redis::Redis>& client) {
    zhiang::Codes cd(client);
    cd.append("cid1", "code1", std::chrono::milliseconds(2000));
    cd.append("cid2", "code2");
    cd.append("cid3", "code3");
    cd.append("cid4", "code4");

    cd.remove("cid2");
    cd.remove("cid3");

    auto y1 = cd.code("cid1");
    auto y2 = cd.code("cid2");
    auto y3 = cd.code("cid3");
    auto y4 = cd.code("cid4");
    if(y1) std::cout << *y1 << std::endl;
    if(y2) std::cout << *y2 << std::endl;
    if(y3) std::cout << *y3 << std::endl;
    if(y4) std::cout << *y4 << std::endl;

    std::this_thread::sleep_for(std::chrono::milliseconds(2100));
    y1 = cd.code("cid1");
    y2 = cd.code("cid2");
    y3 = cd.code("cid3");
    y4 = cd.code("cid4");
    if(y1) std::cout << *y1 << std::endl;
    if(y2) std::cout << *y2 << std::endl;
    if(y3) std::cout << *y3 << std::endl;
    if(y4) std::cout << *y4 << std::endl;
}

int main(int argc, char* argv[]) {
    google::ParseCommandLineFlags(&argc, &argv, true);
    std::shared_ptr<sw::redis::Redis> client = zhiang::redisClientFactory::create(
        FLAGS_host, FLAGS_port, FLAGS_db, FLAGS_keep_alive);
    // Session_test(client);
    // Status_test(client);
    Codes_test(client);
    return 0;
}